
// 图片压缩 url图片地址
export const handleCompressImage = (url, quality = 50) => {
    return new Promise((resolve, reject) => {
        uni.compressImage({
            src: url, // 图片路径
            quality, // 压缩质量，范围0-100
            success: function (res) {
                const filePath = res.tempFilePath;
                resolve(filePath);
            },
            fail: function (err) {
                console.error('图片压缩失败:', err);
                reject(err)
            }
        });
    })
}
/**
 * @description 格式化时间
 * @param {String|Number} dateTime 需要格式化的时间戳
 * @param {String} fmt 格式化规则 yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 默认yyyy-mm-dd
 * @returns {string} 返回格式化后的字符串
 */
export function timeFormat (dateTime = null, formatStr = 'yyyy-mm-dd') {
    let date
    // 若传入时间为假值，则取当前时间
    if (!dateTime) {
        date = new Date()
    }
    // 若为unix秒时间戳，则转为毫秒时间戳（逻辑有点奇怪，但不敢改，以保证历史兼容）
    else if (/^\d{10}$/.test(dateTime?.toString().trim())) {
        date = new Date(dateTime * 1000)
    }
    // 若用户传入字符串格式时间戳，new Date无法解析，需做兼容
    else if (typeof dateTime === 'string' && /^\d+$/.test(dateTime.trim())) {
        date = new Date(Number(dateTime))
    }
    // 处理平台性差异，在Safari/Webkit中，new Date仅支持/作为分割符的字符串时间
    // 处理 '2022-07-10 01:02:03'，跳过 '2022-07-10T01:02:03'
    else if (typeof dateTime === 'string' && dateTime.includes('-') && !dateTime.includes('T')) {
        date = new Date(dateTime.replace(/-/g, '/'))
    }
    // 其他都认为符合 RFC 2822 规范
    else {
        date = new Date(dateTime)
    }

    const timeSource = {
        'y': date.getFullYear().toString(), // 年
        'm': (date.getMonth() + 1).toString().padStart(2, '0'), // 月
        'd': date.getDate().toString().padStart(2, '0'), // 日
        'h': date.getHours().toString().padStart(2, '0'), // 时
        'M': date.getMinutes().toString().padStart(2, '0'), // 分
        's': date.getSeconds().toString().padStart(2, '0') // 秒
        // 有其他格式化字符需求可以继续添加，必须转化成字符串
    }

    for (const key in timeSource) {
        const [ret] = new RegExp(`${key}+`).exec(formatStr) || []
        if (ret) {
            // 年可能只需展示两位
            const beginIndex = key === 'y' && ret.length === 2 ? 2 : 0
            formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex))
        }
    }

    return formatStr
}
/**
 * 生产随机字符串
 * @param {String} len 生成的字符串长度
 * @param {Array} keys 是否包含大写字母、小写字母、数字
 * @returns {String}
 */
export const randomString = (len = 24, keys = ['a', '0']) => {
    let charts = '';
    const config = {
        ['A']: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        ['a']: 'abcdefghijklmnopqrstuvwxyz',
        ['0']: '0123456789'
    };
    keys.forEach(key => {
        charts += config[key];
    });
    const maxPos = charts.length;
    let pwd = '';
    for (let i = 0; i < len; i++) {
        pwd += charts.charAt(Math.floor(Math.random() * maxPos));
    }
    return pwd;
};